Programs are assigned virtual memory that is mapped to real memory for use by the program. During the course of its use, a location in virtual memory may be allocated for different purposes and then freed for reuse. It is not an uncommon programming error for one process in a program to access a location in virtual memory that has already been freed and reallocated to a different process.